package saa.dominio.periodo.aluno;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;

import saa.dominio.periodo.UnidadeDisciplina;

@Entity
@NamedQueries({
    @NamedQuery(name = "UnidadeDisciplinaAluno.unidade.id", query = "SELECT u FROM UnidadeDisciplinaAluno u WHERE u.unidade.id = :id")})
public class UnidadeDisciplinaAluno implements Serializable {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(nullable = false)
    @ManyToOne
    private OfertaDisciplinaAluno disciplina;
    @Column(nullable = false)
    @ManyToOne
    private UnidadeDisciplina unidade;

    @Column(nullable = false)
    private int nota;
    @Column(nullable = false)
    private int presencas;
    @Column(nullable = false)
    private int objetivoNota;
    @Column(nullable = false)
    private int objetivoPresencas;

    @OrderBy(value = "avaliacao")
    @OneToMany(mappedBy = "unidadeDisciplinaAluno")
    private List<AvaliacaoAluno> avaliacoes;

    public UnidadeDisciplinaAluno() {
        super();
    }

    public UnidadeDisciplinaAluno(OfertaDisciplinaAluno disciplina, UnidadeDisciplina unidade, int nota, int presencas, int objetivoNota, int objetivoPresencas) {
        this.disciplina = disciplina;
        this.unidade = unidade;
        this.nota = nota;
        this.presencas = presencas;
        this.objetivoNota = objetivoNota;
        this.objetivoPresencas = objetivoPresencas;
        this.avaliacoes = new ArrayList<AvaliacaoAluno>(4);
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public OfertaDisciplinaAluno getDisciplina() {
        return disciplina;
    }

    public void setDisciplina(OfertaDisciplinaAluno disciplina) {
        this.disciplina = disciplina;
    }

    public UnidadeDisciplina getUnidade() {
        return unidade;
    }

    public void setUnidade(UnidadeDisciplina unidade) {
        this.unidade = unidade;
    }

    public int getNota() {
        return nota;
    }

    public void setNota(int nota) {
        this.nota = nota;
    }

    public int getPresencas() {
        return presencas;
    }

    public void setPresencas(int presencas) {
        this.presencas = presencas;
    }

    public int getObjetivoNota() {
        return objetivoNota;
    }

    public void setObjetivoNota(int objetivoNota) {
        this.objetivoNota = objetivoNota;
    }

    public int getObjetivoPresencas() {
        return objetivoPresencas;
    }

    public void setObjetivoPresencas(int objetivoPresencas) {
        this.objetivoPresencas = objetivoPresencas;
    }

    public List<AvaliacaoAluno> getAvaliacoes() {
        return avaliacoes;
    }

    public void setAvaliacoes(List<AvaliacaoAluno> avaliacoes) {
        this.avaliacoes = avaliacoes;
    }

    public void addAvaliacao(AvaliacaoAluno avaliacao) {
        this.avaliacoes.add(avaliacao);
    }

}
